package com.continautos.common.util;

import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.faces.model.SelectItem;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.continautos.common.persistence.dto.CtaTbConcesionario;
import com.continautos.common.persistence.dto.CtaTbPg;
import com.continautos.common.persistence.dto.CtaTbUsuario;



/**
 * Clase de Utilidades de los backing beans.
 * 
 * @author javier
 * 
 */
public class WebUtils {

	
	private final Logger log = LoggerFactory.getLogger(WebUtils.class);

	
    private static WebUtils instance;	
	
	
	public static synchronized WebUtils getInstance() {
		if( instance == null ) {
			instance = new WebUtils();
		}
		
		return instance;
	}
	
	/**
	 * Este metodo contruye una lista de seleccion de faces, basado en una lista
	 * de parametros generales con el codigo externo como codigo de la lista.
	 * Uso departamentos = WebUtils.createSelectItemParametrosCE(FacadeFactory.getCommonFacade()
			.getParametrosTipoParametro(ETipoParametro.DEPARTAMENTO));

	 * @param parametros
	 * @return
	 */
	public static List<SelectItem> createSelectItem(
			CtaTbPg[] parametros,boolean inicial) {

		List<SelectItem> result = new ArrayList<SelectItem>();
		
		if(inicial){
		   result.add(new SelectItem(null,"Seleccione"));
		}   

		for (CtaTbPg pg : parametros) {

			String deptoNew = null;

			if (pg.getDescripcion().length() >= 100) {

				deptoNew = pg.getDescripcion().substring(0, 100) + "...";
			} else {
				deptoNew = pg.getDescripcion();
			}

			result.add(new SelectItem(pg.getId(), deptoNew));
		}

		return result;
	}
	
	
	
	
	
	/**
	 * Este metodo contruye una lista de seleccion de faces, basado en una lista
	 * de parametros generales con el codigo externo como codigo de la lista.
	 * Uso departamentos = WebUtils.createSelectItemParametrosCE(FacadeFactory.getCommonFacade()
			.getParametrosTipoParametro(ETipoParametro.DEPARTAMENTO));

	 * @param parametros
	 * @return
	 */
	public static List<SelectItem> createSelectItem(
			CtaTbConcesionario[] parametros,boolean inicial) {

		List<SelectItem> result = new ArrayList<SelectItem>();
		
		if(inicial){
		   result.add(new SelectItem(null,"Seleccione"));
		}   

		for (CtaTbConcesionario pg : parametros) {

			String deptoNew = null;

			if (pg.getNombre().length() >= 100) {

				deptoNew = pg.getNombre().substring(0, 100) + "...";
			} else {
				deptoNew = pg.getNombre();
			}

			result.add(new SelectItem(pg.getId(), deptoNew));
		}

		return result;
	}
	
	
	
	
	public static List<SelectItem> createSelectItem(
			CtaTbUsuario[] parametros,boolean inicial) {

		List<SelectItem> result = new ArrayList<SelectItem>();
		
		if(inicial){
		   result.add(new SelectItem(null,"Seleccione el usuario ..."));
		}   

		for (CtaTbUsuario pg : parametros) {

			String deptoNew = null;
			
			deptoNew = pg.getApellidos() + " " + pg.getNombres() + "("+pg.getUsuario()+")";

			if (deptoNew.length() >= 100) {
				deptoNew = deptoNew.substring(0, 100) + "...";
			} 

			result.add(new SelectItem(pg.getId(), deptoNew));
		}

		return result;
	}
	
	
	public String locatorMessage(String resource, String key, Object ...args){
		
			String msg = key;
			
			try {
				ResourceBundle bundle = ResourceBundle.getBundle(resource);
				msg = bundle.getString(key);
			} catch( MissingResourceException mre ) {
				log.warn("Llave no encontrada {} para el recurso {}.properties", key, resource );
				if( args != null ) {
					StringBuffer bargs = new StringBuffer();
					bargs.append(",");
					for( Object arg : args ) {
						bargs.append(arg);
						bargs.append(",");
					}
					msg += bargs;
				}
			}
			return msg;
	}

}
